Argumenten efficiδnt doorgeven

   

Alle argumenten worden via verwijzing aan procedures doorgegeven, tenzij u dit anders aangeeft. Dit is efficiδnt omdat alle argumenten die via verwijzing worden doorgegeven, even snel worden doorgegeven en binnen de procedure dezelfde hoeveelheid ruimte (4 bytes) in beslag nemen, ongeacht het gegevenstype van het argument.

U kunt een argument via waarde doorgeven als u het sleutelwoord ByVal in de declaratie van de procedure opneemt. Argumenten die via waarde worden doorgegeven nemen tussen de 2 en 16 bytes in beslag, afhankelijk van het gegevenstype van het argument. Grotere gegevenstypen worden iets langzamer doorgegeven dan kleinere. U kunt hierdoor de gegevenstypen String en Variant in het algemeen beter niet via waarde doorgeven.

Als u een argument via waarde doorgeeft, kopieert u de oorspronkelijke variabele. Wijzigingen binnen de procedure hebben geen invloed op de oorspronkelijke variabele. Bijvoorbeeld:

Function Factorial (ByVal MyVar As Integer)    ' Function-declaratie.
    MyVar = MyVar - 1
    If MyVar = 0 Then
        Factorial = 1
        Exit Function
    End If
    Factorial = Factorial(MyVar) * (MyVar + 1)
End Function

' Roep faculteit met een variabele S aan.
S = 5
Print Factorial(S)    ' Geeft 120 (de faculteit van 5) weer
Print S    ' Geeft 5 weer.

Als ByVal niet in de functiedeclaratie had gestaan, zouden de voorafgaande instructies Print 1 en 0 weergeven. MyVar zou in dat geval namelijk naar variabele S verwijzen, die met 1 wordt verlaagd tot deze gelijk is aan 0.

Aangezien ByVal een kopie van het argument maakt, kunt u een variant naar de functie Factorial erboven doorgeven. U kunt een variant niet via verwijzing doorgeven als in de declaratie van de procedure staat dat het argument van een ander gegevenstype is.